//
//  HGSPluginBlacklist.h
//
//  Copyright (c) 2009 Google Inc. All rights reserved.
//
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are
//  met:
//
//    * Redistributions of source code must retain the above copyright
//  notice, this list of conditions and the following disclaimer.
//    * Redistributions in binary form must reproduce the above
//  copyright notice, this list of conditions and the following disclaimer
//  in the documentation and/or other materials provided with the
//  distribution.
//    * Neither the name of Google Inc. nor the names of its
//  contributors may be used to endorse or promote products derived from
//  this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//

#import <Cocoa/Cocoa.h>

/*!
 @header Plugin Blacklisting
 Allows plugins that have been identified as dangerous to be kept
 from loading.
*/

/*!
  A singleton class that can be queried to determine if a plugin
  appears on the blacklist of plugins. The blacklist is refreshed
  approximately once every 24 hours, with the previous results cached
  in between updates.
*/
@interface HGSPluginBlacklist : NSObject {
 @private
  __weak NSTimer *updateTimer_;
  NSArray *blacklistedPlugins_;
  NSString *blacklistPath_;
}

/*! 
  Path to the file containing the file containing the blacklist cache.
*/
@property (nonatomic, retain, readonly) NSString *blacklistPath;

/*!
  Returns the singleton instance of the plugin blacklist.
*/
+ (HGSPluginBlacklist *)sharedPluginBlacklist;

/*!
  Returns YES if the plugin represented by pluginBundle is in the
  blacklist.
*/
- (BOOL)bundleIsBlacklisted:(NSBundle *)pluginBundle;

/*!
  Returns YES if the plugin represented by bundleID is in the
  blacklist.
*/
- (BOOL)bundleIDIsBlacklisted:(NSString *)bundleID;

/*!
  Force an immediate (albeit asynchronous) update of the plugin
  blacklist, and resets the refresh interval timer.
*/
- (void)updateBlacklist:(id)sender;

/*!
  Update the blacklist using the XML contained in data.
*/
- (void)updateBlacklistWithData:(NSData *)data;
@end

/*!
  Notification sent when the blacklist has completed its
  asynchronous refresh.
*/
extern NSString* kHGSBlacklistUpdatedNotification;
